Line Pretest 福岡前測驗(Top)

Posted on 5 21, 2016 in misc

Q1 Where n is a positive integer, the function $ f(n)$ satisfies the following.

#

(1) Please create a program to find $ f(n)$ .(You can write in any language that you are good at.)

Here can using recursive to sloving this problem:

def fib(i):
    if i<2: return 1
    return fib(i-1)+fib(i-2)

But can reduce the time complexity by save the return value in list:

def fibonacci(n, fib=[0, 1]):
    if n >= len(fib):
        for i in range(len(fib), n+1):
            fib.append(fib[i-1]+fib[i-2])
    return fib[n]

or using DP:

class dpFib(object):
    def __init__(self):
        self.__result = {0: 0, 1: 1}

    def fib(self, x):
        if x in self.__result:
            return self.__result[x]

        r = self.fib(x-1) + self.fib(x-2)
        self.__result[x] = r
        return r

dpfib = dpFib()
print(dpfib.fib(x=8181))

(2) Use the program from (1) to find $ f(8181)$.

fibonacci(n=8181)


Q2 Please implement a program that lists the nodes of a random binary tree by nodes at the same depth.

Using BFS, code:

def bfs(graph, queue, visited=None):
    if visited is None:
        visited = set()
    if not queue:
        return
    start = queue.pop(0)
    yield start
    visited.add(start)
    queue += [vertex for vertex in graph[start] - set(queue) - visited]
    yield from bfs(graph, queue, visited=visited)


def bfs_paths(graph, queue, goal):
    if not queue:
        return
    (start, path) = queue.pop(0)
    if start == goal:
        yield path
    queue += [(vertex, path + [vertex]) for vertex in graph[start] - set(path)]
    yield from bfs_paths(graph, queue, goal)


graph = {
    'A': set(['B', 'C']),
    'B': set(['A', 'D', 'E']),
    'C': set(['A', 'F']),
    'D': set(['B']),
    'E': set(['B', 'F']),
    'F': set(['C', 'E']),
}

print(repr([vertex for vertex in bfs(graph, ['A'])]))
print(repr([path for path in bfs_paths(graph, [('A', ['A'])], 'F')]))

Output:

['A', 'C', 'B', 'F', 'D', 'E']
[['A', 'C', 'F'], ['A', 'B', 'E', 'F']]

Q3 (1) Imagine you are playing a board game. You roll a 6-faced dice and move forward the same number of spaces that you rolled. If the finishing point is “n” spaces away from the starting point, please implement a program that calculates how many possible ways are there to arrive exactly at the finishing point.

#

/* 
 * Description: solve dice combinations using dynamic programing
 * Complier: g++
 */
#include <iostream>
#include <string>
#include <cmath>
#include <vector>

using namespace std;

/****************************************************************
 * dice Combinations: using dynamic programming
 *
 * Basic idea:
 * dp[i][j] = sum(dp[i-1][j-k*coins[i-1]]) for k = 1,2,..., j/coins[i-1]
 * dp[0][j] = 1 for j = 0, 1, 2, ..., sum
 *
 * Output:
 * the number of combinations using dice construct sum
 *
 * Usage:
 * c[6] = {1, 2, 3, 4, 5, 6};
 * int result = diceCombinations(c, 6, 100);
 *
 ****************************************************************/
int diceCombinations(int coins[], int diceKinds, int sum)
{
    // 2-D array using vector: is equal to: dp[diceKinds+1][sum+1] = {0};
    vector<vector<int> > dp(diceKinds + 1);
    for (int i = 0; i <= diceKinds; ++i)
    {
        dp[i].resize(sum + 1);
    }
    for (int i = 0; i <= diceKinds; ++i)
    {
        for (int j = 0; j <= sum; ++j)
        {
            dp[i][j] = 0;
        }
    }

    //init: dp[i][0] = 1; i = 0, 1, 2 ..., diceKinds
    //Notice: dp[0][0] must be 1
    //using 0 kinds of dice construct 0 has one way. but it the foundation
    //of iteration. without it everything based on it goes wrong
    for (int i = 0; i <= diceKinds; ++i)
    {
        dp[i][0] = 1;
    }

    // iteration: dp[i][j] = sum(dp[i-1][j - k*coins[i-1]])
    // k = 0, 1, 2, ... , j / coins[i-1]
    for (int i = 1; i <= diceKinds; ++i)
    {
        for (int j = 1; j <= sum; ++j)
        {
            dp[i][j] = 0;
            for (int k = 0; k <= j / coins[i-1]; ++k)
            {
                dp[i][j] += dp[i-1][j - k * coins[i-1]];
            }
        }
    }

    return dp[diceKinds][sum];
}


int main()
{
    int coins[6] = {1, 2, 3, 4, 5, 6};
    int sum = 610;
    int result = diceCombinations(coins, 6, 610);
    cout << "using 6 kinds of dice construct 610, combinations are: " << endl;
    cout << result << endl;
    return 0;
}
def count(S, m, n):
    # We need n+1 rows as the table is consturcted in bottom up
    # manner using the base case 0 value case (n = 0)
    table = [[0 for x in range(m)] for x in range(n + 1)]

    # Fill the enteries for 0 value case (n = 0)
    for i in range(m):
        table[0][i] = 1

    # Fill rest of the table enteries in bottom up manner
    for i in range(1, n + 1):
        for j in range(m):
            # Count of solutions including S[j]
            x = table[i - S[j]][j] if i - S[j] >= 0 else 0

            # Count of solutions excluding S[j]
            y = table[i][j - 1] if j >= 1 else 0

            # total count
            table[i][j] = x + y

    return table[n][m - 1]

(2) If n=610, how many possible ways are there to arrive exactly at the finishing point?

output = 

Q4 Please tell us about the technologies you frequently use.

Category Example Your Experience
Languages
Object Containers
MVC
ORM
Testing
IDE/Editor
UML/Diagram
SCM
Builds
CI/Quality
Java Profilers
Web Applications
Performance Profilers
Issue Trackers
Agile Processes
Social Coding
Code Review

Q5 Please answer the questions below.

Question Answer
What specifically do you want to
achieve at LINE Fukuoka?
What kind of Web or smartphone
applications are you interested in?
List up to 3 kinds of technology you
have gotten interested in recently,
and why you are interested in them.
1. What is the most technically
difficult or interesting thing you
have experienced in development
or programming so far?

2. Why did you find it difficult /
interesting?

3. What was your solution, and how
did you implement it? (Please
answer in as much detail as
possible)
Public repository URLs (e.g.: GitHub,
Bitbucket, etc.)
Public social accounts (if applicable; e.g.:
Twitter, Facebook, etc.)
Which 3 technical books or articles
have made a big impact on you?

Thank you for your time!